﻿Imports System.Math

Public Class Form1
    Dim nome_file As String
    Dim rigacolpo = "^PUN\(\w+\d+\(P\,(?<xinizio>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,(?<yinizio>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,(?<xfine>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,(?<yfine>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,(?<uscita1>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,(?<uscita2>(?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,((?:\-|)(?:(?:\d+\.\d+)|(?:\d+)))\,\w\d\)\)"
    Dim rigaut = "^TOOL\((?<tipout>(\w+\.)|(\w+))\,(?<codut>(\w\d+))\,I\*\,(?<dim1>(\d+\.\d+)|(\d+))(\)|\,)(?<dim2>($)|(\d+\.\d+)|(\d+))"
    Dim rigacolpotondo = "^PUN\(\w\d+\((?<xcolpotondo>((\d+)|(\d+\.\d+)))\,(?<ycolpotondo>((\d+)|(\d+\.\d+)))\)\)"
    Dim tempo_colpo As Integer



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        OpenFileDialog1.Filter = ("Pezzo singolo (*.par)|*.par|Lamiera lavorata (*.lst)|*.lst")
        OpenFileDialog1.FileName = ""
        OpenFileDialog1.ShowDialog()
        nome_file = OpenFileDialog1.FileName
        TextBox1.Text = nome_file

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim str As New System.IO.StreamReader(nome_file)
        Dim regexcolpo As New System.Text.RegularExpressions.Regex(rigacolpo)
        Dim regexut As New System.Text.RegularExpressions.Regex(rigaut)
        Dim regexcolpotondo As New System.Text.RegularExpressions.Regex(rigacolpotondo)
        Dim tipout As String
        Dim codut As String
        Dim dim1 As Single
        Dim dim2 As Single
        Dim xinizio As Single
        Dim yinizio As Single
        Dim xfine As Single
        Dim yfine As Single
        Dim uscita1 As Single
        Dim uscita2 As Single
        Dim ncolpi As Single
        Dim Lx As Single
        Dim Ly As Single
        Dim Linc As Double
        Dim xcolpotondo As Single
        Dim ycolpotondo As Single
        Dim ncolpitot As Single = 0
        Dim tempotot As Integer
        Dim listaut As New ArrayList
        Dim l_tratto As Single = 0

        If nome_file.EndsWith(".par", StringComparison.OrdinalIgnoreCase) Then
            tempo_colpo = 2
            ListBox1.Items.Clear()
            ListBox2.Items.Clear()
            While Not str.EndOfStream
                Dim riga = str.ReadLine
                Dim matchcolpo As System.Text.RegularExpressions.Match
                Dim matchut As System.Text.RegularExpressions.Match
                Dim matchcolpotondo As System.Text.RegularExpressions.Match

                matchut = regexut.Match(riga)
                matchcolpo = regexcolpo.Match(riga)
                matchcolpotondo = regexcolpotondo.Match(riga)

                If riga = "'FACTORY" Then
                    Exit While
                End If

                If matchut.Success Then

                    tipout = matchut.Groups("tipout").Value
                    codut = matchut.Groups("codut").Value
                    If listaut.Contains(codut) Then
                    Else
                        listaut.Add(codut)
                    End If


                    If matchut.Groups("dim1").Value.Contains(".") Then
                        dim1 = matchut.Groups("dim1").Value.Replace(".", ",")
                    End If

                    If matchut.Groups("dim2").Value.Contains(".") Then
                        dim2 = matchut.Groups("dim2").Value.Replace(".", ",")
                    ElseIf matchut.Groups("dim2").Value = Nothing Then
                        dim2 = 0
                    Else
                        dim2 = matchut.Groups("dim2").Value
                    End If

                    ' ListBox1.Items.Add(tipout & " , " & codut & " , " & dim1 & " , " & dim2)
                End If

                If matchcolpo.Success Then

                    If matchcolpo.Groups("xinizio").Value.Contains(".") Then
                        xinizio = matchcolpo.Groups("xinizio").Value.Replace(".", ",")
                    Else
                        xinizio = matchcolpo.Groups("xinizio").Value
                    End If

                    If matchcolpo.Groups("yinizio").Value.Contains(".") Then
                        yinizio = matchcolpo.Groups("yinizio").Value.Replace(".", ",")
                    Else
                        yinizio = matchcolpo.Groups("yinizio").Value
                    End If

                    If matchcolpo.Groups("xfine").Value.Contains(".") Then
                        xfine = matchcolpo.Groups("xfine").Value.Replace(".", ",")
                    Else
                        xfine = matchcolpo.Groups("xfine").Value
                    End If

                    If matchcolpo.Groups("yfine").Value.Contains(".") Then
                        yfine = matchcolpo.Groups("yfine").Value.Replace(".", ",")
                    Else
                        yfine = matchcolpo.Groups("yfine").Value
                    End If

                    If matchcolpo.Groups("uscita1").Value.Contains(".") Then
                        uscita1 = matchcolpo.Groups("uscita1").Value.Replace(".", ",")
                    Else
                        uscita1 = matchcolpo.Groups("uscita1").Value
                    End If

                    If matchcolpo.Groups("uscita2").Value.Contains(".") Then
                        uscita2 = matchcolpo.Groups("uscita2").Value.Replace(".", ",")
                    Else
                        uscita2 = matchcolpo.Groups("uscita2").Value
                    End If

                    'calcolare lunghezza tratto

                    If xinizio < xfine Then
                        Lx = xfine - xinizio
                    Else
                        Lx = xinizio - xfine
                    End If

                    If yinizio < yfine Then
                        Ly = yfine - yinizio
                    Else
                        Ly = yinizio - yfine
                    End If

                    If Lx = 0 Or Ly = 0 Then
                        Linc = 0
                        If Lx <> 0 Then
                            Lx += -uscita1 + -uscita2
                            l_tratto = Lx
                        End If

                        If Ly <> 0 Then
                            Ly += -uscita1 + -uscita2
                            l_tratto = Ly
                        End If
                    Else
                        Linc = Sqrt(Lx ^ 2 + Ly ^ 2)
                        Linc += -uscita1 + -uscita2
                        l_tratto = Linc
                    End If

                    'fine lunghezza tratto

                    'calcolo colpi
                    'lx o ly \ dim1
                    If Linc = 0 Then
                        If Lx <> 0 Then
                            ncolpi = Lx / dim1
                        ElseIf Ly <> 0 Then
                            ncolpi = Ly / dim1
                        End If
                        If ncolpi < 1 Then
                            ncolpi = 1
                        ElseIf ncolpi > 1 Then
                            ncolpi = Int(ncolpi) + 1
                        End If
                    ElseIf Linc <> 0 Then
                        ncolpi = Linc / dim1
                        If ncolpi < 1 Then
                            ncolpi = 1
                        ElseIf ncolpi > 1 Then
                            ncolpi = Int(ncolpi) + 1
                        Else

                        End If
                    End If
                    ncolpitot += ncolpi
                    tempotot += tempo_colpo * ncolpi
                    ListBox1.Items.Add(Lx & " ," & Ly & " , " & Linc & " , " & ncolpi & " , " & tipout & " , " & codut)

                    ListBox2.Items.Add(xinizio & " " & xfine & " ," & yinizio & " " & yfine & " lunghezza X " & Lx & " lunghezza y " & Ly & " Lunghezza tratto " & Linc)

                    Select Case tipout
                        Case "QUADRO"
                            If ncolpi = 1 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio, yinizio, dim1, dim1, 0)
                            ElseIf ncolpi = 2 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio, yinizio, dim1, dim1, 0)
                                Bag_litecad1.aggiungi_rettangolo(xfine, yfine, dim1, dim1, 0)
                            ElseIf ncolpi > 2 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio, yinizio, dim1, dim1, 0)
                                Bag_litecad1.aggiungi_rettangolo(xfine, yfine, dim1, dim1, 0)
                            End If
                        Case "TONDO"
                            Bag_litecad1.aggiungi_cerchio(xcolpotondo, ycolpotondo, dim1)
                        Case "RETTANG."
                            If ncolpi = 1 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio, yinizio, dim1, dim2, 0)
                            ElseIf ncolpi = 2 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio + Sin(0 * 3.14 / 180), yinizio + Cos(0 * 3.14 / 180), dim1, dim2, 0)
                                Bag_litecad1.aggiungi_rettangolo(xfine, yfine, dim1, dim2, 0)
                            ElseIf ncolpi > 2 Then
                                Bag_litecad1.aggiungi_rettangolo(xinizio + Sin(0 * 3.14 / 180), yinizio + Cos(0 * 3.14 / 180), dim1, dim2, 0)
                                Bag_litecad1.aggiungi_rettangolo(xfine, yfine, dim1, dim2, 0)

                            End If

                    End Select

                End If

                If matchcolpotondo.Success Then
                    If matchcolpotondo.Groups("xcolpotondo").Value.Contains(".") Then
                        xcolpotondo = matchcolpotondo.Groups("xcolpotondo").Value.Replace(".", ",")
                    Else
                        xcolpotondo = matchcolpotondo.Groups("xcolpotondo").Value
                    End If

                    If matchcolpotondo.Groups("ycolpotondo").Value.Contains(".") Then
                        ycolpotondo = matchcolpotondo.Groups("ycolpotondo").Value.Replace(".", ",")
                    Else
                        ycolpotondo = matchcolpotondo.Groups("ycolpotondo").Value
                    End If
                    ncolpi = 1
                    ncolpitot += ncolpi
                    tempotot += tempo_colpo * ncolpi
                    ListBox1.Items.Add(xcolpotondo & " ," & ycolpotondo & " , " & ncolpi & " , " & tipout & " , " & codut)
                    Bag_litecad1.aggiungi_cerchio(xcolpotondo, ycolpotondo, dim1)
                End If


                '---------------------disegno le varie geometrie sul controllo------------------------------


                '-------------------------------------------------------------------------------------------
            End While
        End If
        Label1.Text = ncolpitot
        Label2.Text = tempotot / 10
        Label3.Text = listaut.Count
        Bag_litecad1.aggiorna()

    End Sub
End Class
